package com.usj.dcalvo.ecommerce.action;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import com.usj.dcalvo.ecommerce.bean.ProductoBean;
import com.usj.dcalvo.ecommerce.manager.IProductoManager;

public class CarritoAction extends ActionSupport {
	private static final String DETALLE = "detalle";

	private static final long serialVersionUID = 1L;

	// Logger configured using log4j
	private static final Logger logger = Logger.getLogger(CarritoAction.class);

	private ProductoBean producto;

	private IProductoManager productoManager;

	private List<ProductoBean> listadoProductos;

	/**
	 * A�ade un articulo al carrito
	 * 
	 * @return
	 */
	public String addProductoCarrito() {
		logger.info("A�adiendo un producto al carrito");
		HttpSession session = ServletActionContext.getRequest().getSession();
		List<Integer> attribute = ((List<Integer>) session
				.getAttribute("listaProductosSession"));
		if (attribute == null) {
			attribute = new ArrayList<Integer>();
		}
		attribute.add(producto.getId());
		session.setAttribute("listaProductosSession", attribute);
		return SUCCESS;
	}

	/**
	 * A�ade un articulo al carrito
	 * 
	 * @return
	 */
	public String verDetalleCarrito() {
		logger.info("Viendo la lista del carrito...");
		HttpSession session = ServletActionContext.getRequest().getSession();
		List<Integer> attribute = ((List<Integer>) session
				.getAttribute("listaProductosSession"));
		if (attribute != null) {
			logger.info("Llamo al DAO para recuperar los articulos");
			listadoProductos = productoManager.getProductosPorIds(attribute);
		}
		return DETALLE;
	}

	public String borrarProductoCarrito() {
		logger.info("Viendo la lista del carrito...");
		HttpSession session = ServletActionContext.getRequest().getSession();
		List<Integer> attribute = ((List<Integer>) session
				.getAttribute("listaProductosSession"));
		if (attribute != null) {
			logger.info("Borramos el producto");
			for (Iterator<Integer> iterator = attribute.iterator(); iterator.hasNext();) {
				Integer integer = (Integer) iterator.next();
				if (integer.equals(producto.getId())) {
					iterator.remove();
					break;
				}
			}
		}
		return DETALLE;
	}

	public ProductoBean getProducto() {
		return producto;
	}

	public void setProducto(ProductoBean producto) {
		this.producto = producto;
	}

	public IProductoManager getProductoManager() {
		return productoManager;
	}

	public void setProductoManager(IProductoManager productoManager) {
		this.productoManager = productoManager;
	}

	public List<ProductoBean> getListadoProductos() {
		return listadoProductos;
	}

	public void setListadoProductos(List<ProductoBean> listadoProductos) {
		this.listadoProductos = listadoProductos;
	}
}
